#include <iostream>
/**
 * 在C语言中，编译器会先到 m 所在的内存取出一份数据，再将这份数据赋给 n；
 * 而在C++中，编译器会直接将 10 赋给 n，没有读取内存的过程，和int n = 10;的效果一样。
 * C++ 中的常量更类似于#define命令，是一个值替换的过程，只不过#define是在预处理阶段替换，而常量是在编译阶段替换。
 * C++ 对 const 的处理少了读取内存的过程，优点是提高了程序执行效率，缺点是不能反映内存的变化，一旦 const 变量被修改，C++ 就不能取得最新的值。
 *
 * 当然，这种修改常量的变态代码在实际开发中基本不会出现，
 * 本例只是为了说明C和C++对 const 的处理方式的差异：
 * C语言对 const 的处理和普通变量一样，会到内存中读取数据；
 * C++ 对 const 的处理更像是编译时期的#宏，是一个值替换的过程。
 * @return
 */
using namespace std;

int main() {

    const int n = 10;
    cout << "&n = " << &n << endl;
//    int *p = &n;  //必须强制类型转换
    cout << "type:" << typeid(&n).name() << endl;
    int *p = (int *) &n;  //必须强制类型转换
    cout << "type:" << typeid(p).name() << endl;
    cout << "p = " << p << endl;
    cout << "*p = " << *p << endl;
    cout << "&p = " << &p << endl;
    *p = 99;  //修改const变量的值
    printf("%d\n", n);
    std::cout << "Hello, World!" << std::endl;
    return 0;
}
